package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * Created with IntelliJ IDEA.
 * Description:
 */
@Controller
@RequestMapping("/test")
public class TestController {

    /**
     * 请求转发，将某个页面的内容或数据加载到当前地址
     * 地址仍是当前地址，不发生变化
     * 这是 服务器的行为，客户端一次请求就够了
     * 如果不加 @ResponseBody，那么返回的结果默认就是请求转发的地址
     * @return
     */
    @RequestMapping("/fw")
    public String myForward() {
        return "/login.html";
    }

    @RequestMapping("/fw1")
    public String myForward1() {
        // forward和redirect单词要求全部小写，":"与后面的地址之间不能有空格
        return "forward:/login.html";
    }

    @RequestMapping("/fw2")
    public void myForward2(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.getRequestDispatcher("/login.html").forward(request, response);
    }

    /**
     * 请求重定向
     * 这是客户端的行为，服务器先返回一个302重定向
     * 客户端拿到重定向的地址之后再申请访问新的地址
     * @return
     */
    @RequestMapping("/rd")
    public String myRedirect() {
        return "redirect:/login.html";
    }

    /**
     * 使用 HttpServletResponse 实现
     * @param response
     * @throws IOException
     */
    @RequestMapping("/rd2")
    public void myRedirect2(HttpServletResponse response) throws IOException {
        response.sendRedirect("/login.html");
    }
}
